package lambda;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

/**
 * JDK8之后，java推出了一个新特性:lambda表达式
 * lambda表达式可以用更简洁的语法创建匿名内部类。
 * 语法:
 * (参数列表)->{
 *     方法体
 * }
 *
 * lambda创建时，实现的接口只能有一个抽象方法
 * lambda表达式可以让程序员更聚焦实现的逻辑，而不再赘述重写时的接口，方法定义
 */
public class LambdaDemo1 {
    public static void main(String[] args) {
        Comparator<String> c1 = new Comparator<String>() {
            public int compare(String o1, String o2) {
                return o2.length()-o1.length();//按照字符多少的降序
            }
        };
        //标准的lambda表达式省去了接口和方法定义，只保留方法体和参数列表
        Comparator<String> c2 = (String o1, String o2)->{
            return o2.length()-o1.length();//按照字符多少的降序
        };

        //如果方法中只有一句代码，那么方法的"{}"可以忽略不写，并且如果含有return要一同忽略
        Comparator<String> c3 = (String o1, String o2)->o2.length()-o1.length();//按照字符多少的降序

        //参数类型可以忽略不屑
        Comparator<String> c4 = (o1, o2)->o2.length()-o1.length();

        List<String> list = new ArrayList<>();
        list.add("王克晶");
        list.add("传奇");
        list.add("伟超老师");
//        Collections.sort(list,(o1, o2)->o2.length()-o1.length());
        //JDK8之后可以直接使用List自身提供的sort方法基于给定的比较规则排序集合
        list.sort((o1, o2)->o2.length()-o1.length());
        System.out.println(list);
    }
}
